import 'package:flutter/material.dart';
import 'dart:math' as math;
import 'package:flutter/foundation.dart' show kIsWeb;
import 'dart:io';
import '../../services/file_service.dart';

/// 预览工具类，提供预览相关的通用功能
class PreviewUtils {
  /// 根据文件扩展名获取可能的文件类型
  static String getFileTypeFromExtension(String fileName) {
    final extension = fileName.toLowerCase().split('.').last;

    // 图片类型
    if (['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp'].contains(extension)) {
      return 'image';
    }

    // 视频类型
    if ([
      'mp4',
      'avi',
      'mov',
      'mkv',
      'wmv',
      'flv',
      'webm',
    ].contains(extension)) {
      return 'video';
    }

    // 音频类型
    if (['mp3', 'wav', 'ogg', 'aac', 'flac', 'm4a'].contains(extension)) {
      return 'audio';
    }

    // 文档类型
    if ([
      'pdf',
      'doc',
      'docx',
      'xls',
      'xlsx',
      'ppt',
      'pptx',
      'txt',
    ].contains(extension)) {
      return 'document';
    }

    // 默认为其他类型
    return 'other';
  }

  /// 格式化时间显示
  static String formatDuration(Duration duration) {
    String twoDigits(int n) => n.toString().padLeft(2, '0');
    String twoDigitMinutes = twoDigits(duration.inMinutes.remainder(60));
    String twoDigitSeconds = twoDigits(duration.inSeconds.remainder(60));
    if (duration.inHours > 0) {
      return '${twoDigits(duration.inHours)}:$twoDigitMinutes:$twoDigitSeconds';
    }
    return '$twoDigitMinutes:$twoDigitSeconds';
  }

  /// 获取文件图标
  static IconData getFileIcon(String? fileType, String? extension) {
    if (fileType == 'document') {
      if (extension == 'pdf') {
        return Icons.picture_as_pdf;
      } else if (['doc', 'docx'].contains(extension)) {
        return Icons.description;
      } else if (['xls', 'xlsx'].contains(extension)) {
        return Icons.table_chart;
      } else if (['ppt', 'pptx'].contains(extension)) {
        return Icons.slideshow;
      }
      return Icons.insert_drive_file;
    } else if (fileType == 'audio') {
      return Icons.audio_file;
    } else if (fileType == 'other') {
      return Icons.attach_file;
    }
    return Icons.insert_drive_file;
  }

  /// 获取文件卡片颜色
  static Color getFileColor(String? fileType) {
    switch (fileType) {
      case 'document':
        return const Color(0xFF4285F4); // 蓝色
      case 'audio':
        return const Color(0xFFEA4335); // 红色
      case 'other':
        return const Color(0xFF34A853); // 绿色
      default:
        return const Color(0xFFFBBC05); // 黄色
    }
  }

  /// 检查是否为Android平台
  static bool get isAndroid => !kIsWeb && Platform.isAndroid;

  /// 限制值在指定范围内
  static double clamp(double value, double min, double max) {
    return math.max(min, math.min(max, value));
  }
}
